package model;
import java.util.ArrayList;
/**
 * Class PersonCon - En container af personer
 * 
 * Klassen er en del af programmet DVD lending
 * DVD lending er et udlånssystem, som er textbaseseret UI.
 * 
 * PersonCon repræsenterer en liste i vores program af personer.
 * 
 * @author Ole, Silas, Danny, Alex, Anders, Ronnie
 * 
 */
public class PersonCon
{
    //Instance variables
    private ArrayList<Person> persons;
    private static PersonCon instance;
    /**
     * Constructor for objects of class Person
     */
    public PersonCon()
    {
        //der laves en arrayList som skal indeholde objekter af typen Person.
        persons = new ArrayList<Person>();

    }

    /**
     * Object af typen Person, addes til ArrayListen
     */
    public void addPerson(Person p){
        Person currentP = null;
        int i=0;
        boolean found = false;
        String search = p.getPhone();
        if(persons.isEmpty())
        {
            persons.add(p);
            System.out.println("Personen er opretttet");
        }
        else
        {
            while (!found && i<persons.size()){
                if (persons.get(i).getPhone().equals(search)){
                    found = true; //hvis fundes, returneres true
                    System.out.println("telefonnummeret findes allerede i systemet");
                }

                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }

            if(found==false)
            {
                persons.add(p);
                System.out.println("Personen er oprettet");
            }
        }

    }

    /**
     * Metoden removePerson fjerner objekt Person fra ArrayListen persons
     */
    public void removePerson(Person p)
    {
        persons.remove(p);
    }

    /**
     * Der findes en person på baggrund af personens telefonnummer
     * @param phoneNumber Finder en person ud fra phoneNumber
     * @return Returnerer en person
     */
    public Person findPerson(String phoneNumber){
        Person currentP = null;
        int i=0;
        boolean found = false;
        if(persons.isEmpty())
        {
            System.out.println("\n");
        }
        else
        {
            while (!found && i<persons.size()){
                if (persons.get(i).getPhone().equals(phoneNumber)){
                    currentP = persons.get(i);
                    found = true; //hvis fundes, returneres true
                }

                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }
        }
        return currentP; //Her returneres en person
    }

    /**
     * Denne metode skal oprette ny PersonContainer,
     * hvis der ikke findes nogen på runtime(når metoden kaldes)
     * @return Returnerer instance
     */
    public static PersonCon getInstance(){
        if(instance == null){
            instance = new PersonCon();
        }
        return instance;
    }

    /**
     * Metoden listPersons printer information om hver person på ArrayListen persons
     */
    public void listPersons()
    {
        if(persons.isEmpty())
        {
            System.out.println("Listen er tom");
        }
        else
        {
            for (int i = 0; i < persons.size(); i++)
            {
                System.out.println("Låner " + i+1 + "\n");
                persons.get(i).getInfo();
            }
        }
    }
}

